סטודנטים יקרים לפניכם ספר תרגילים בקורס ארגון ותכנות המחשב (שפת אסמבלי). הספר הוא חלק מפרויקט חדשני וראשון מסוגו בארץ במקצוע זה, המועבר ברשת האינטרנט.On-line הקורס באתר כולל פתרונות מלאים לספר התרגילים. הקורס נכתב ע"י גברת שלי קול. הפתרונות מוגשים בסרטוני וידאו המלווים בהסבר קולי, כך שאתם רואים את התהליכים בצורה מובנית, שיטתית ופשוטה, ממש כפי שנעשה בשיעור פרטי. אז אם אתם עסוקים מידי בעבודה, סובלים מלקויות למידה, רוצים להצטיין או פשוט אוהבים ללמוד בשקט בבית, אנחנו מזמינים אתכם לחוויית לימודים יוצאת דופן וחדשה לחלוטין, היכנסו עכשיו לאתר אנו מאחלים לכם הצלחה מלאה בבחינות צוות האתר GooL לפתרון מלא בסרטון וידאו היכנסו ל- גוּל, בּ ש ביל ה תרגוּל! www.gool.co.il
תרגיל 1 - תכניתראשונה כתוב תכנית אסמבלי המדפיסה World!" "Hello למסך. תרגיל 2 - פעולותחשבוניותופקודותקפיצה כתוב תכנית השואלת את המשתמש מה הציון שלו במבוא למדעי המחשב. לאחר מכן, התוכנית קולטת מספר בין 0 ל 100. אם הציון הוא 100 התכנית תדפיס best" "You are the אם הציון מעל 90 התכנית תדפיס."Try to get more " לכל מקרה אחר, "You are good" תרגיל 3 - התייחסותלזיכרון השלם את הטבלה הבאה,אם הפקודה חוקית (תחת 8086 ),רשום את משמעותה. משמעות חוקית הפקודה MOV [AX],DL MOV [BX],CL MOV AX, [SI] MOV [DI-23],CL MOV [DI+SI],CH MOV [BX],[DI] MOV [SI],DH MOV DS:[DI],AX MOV CL,1234 Yes/No
MOV DH,300 MOV CH,011H MOV CH,DX MOV AX,BL MOV AL,AH MOV DL,256 MOV DH,255 MOV BX, OFFSET x MOV [BL],AL MOV SI, 2 MOV DI, OFFSET str[si]
תרגיל 4 - מספרים מסומנים יש לקלוט מהמשתמש מספר בינארי בצורה של ארבעה ביטים. המספר יכול להיות שלילי (בשיטת המשלים ל- 2 ) או חיובי. אם המספר הנקלט חיובי, יש להדפיס את השלילי המתאים לו בשיטת המשלים ל- 2. אחרת, יש להדפיס הודעה מתאימה. דוגמא לפלט התוכנית: דוגמא נוספת: THIS PROGRAM CONVERTS TO NEGATIVE. Please enter binary number: 0101 Your Number is Positive. Its Negative is: 1011 THIS PROGRAM CONVERTS TO NEGATIVE. Please enter binary number: 1111 Your Number is Negative!!! תרגיל 5 לולאות כתוב תוכנית המגדירה ב- DATA. את המערך הבא: 0 1 2 3 4 5 6 אינדקס 7-2000 1125-5867 11777-76 31-67 ערך 121 על התכנית למצוא ולהדפיס את הממוצע של המספרים במערך. ניתן להניח כי הממוצע הוא מספר שלם.
תרגיל 6 פרוצדורות סעיף א: כתוב פרוצדורה באסמבלי המחשבת מקסימום במערך של מספרים שלמים. יש לכתוב את הפרוצדורה כך ש: הכתובת לאיבר הראשון במערך נתונה ב.DI מספר האיברים במערך (גודל המערך) נתון ב- CX..1.2 סעיף ב: כתוב פרוצדורה באסמבלי המדפיסה מספר שלם. יש לכתוב את הפרוצדורה כך שהפרמטר (המספר השלם) נתון בשטח זיכרון גלובלי בשם.num סעיף ג: הוסף MAIN לתוכנית כך שידפיס את המקסימום במערך הבא: 2443 45 6-45 -3456 5678 56-89 -4 321 5688 43 גודל המערך: 12.
תרגיל 7 - אסמבלי+ שפתC כתבו פרוצדורה באסמבלי הנקראת משפת Cומקבלת מערך של מספרים שלמים (מסוג,(int את גודל המערך וכן מערך נוסף ופויינטר לגודל המערך הנוסף. הפרוצדורה מחשבת את סכום המספרים במערך ובודקת האם קיימים מספרים במערך הגדולים מהסכום. אם כן, על הפרוצדורה להחזיר 1 ולהעתיק את המספרים הגדולים מהסכום למערך הנוסף ולאתחל את גודלו. אחרת, על הפרוצדורה להחזיר 0. הגדרת הפרוצדורה היא: int SumBigger(intarr[], int size, int bigarr[], int * bigsize); קוד C הקוראלפרוצדורה: #include <stdio.h> #define N 10 extern int SumBigger (int arr[], int size, int bigarr[], int * bigsize); void main() { } int arr[n], bigarr[n], bigsize, i; printf("\nplease enter %d numbers\n", N); for(i=0;i<n;i++) scanf("%d",&arr[i]); if(sumbigger (arr, N, bigarr, &bigsize)) { printf("\nnumbers that larger than the sum:\n"); for (i=0; i<bigsize; i++) printf("%d ", bigarr[i]); } else printf("\nthere are NO numbers larger than the sum\n"); return;
תרגיל 8 - סעיף א': מודליםשלזיכרון, פויינטרלפונקציה ממש פרוצדורה בשפת אסמלי שתקרא מתוך תכניתCהמבצעת חיבור של מספרים במערך A עם המספרים במערך Bוהתוצאה תהיה במערך C. ז"א, הפונקציה תבצע.C[i]=A[i]+B[i].( בנוסף, על הפונקציה להחזיר את הסכום הכולל ) יש לממש את הפרוצדורה במודל.LARGE הגדרת הפרוצדורה היא: size); int add_nums(int A[],int B[], int C[], int קוד Cהקורא לפרוצדורה הוא: #include <stdio.h> #define N 10 extern int add_nums(int A[],int B[], int C[], int size); void main() { } int A[N], B[N], C[N], i, size=n; printf("\nenter %d Numbers\n", N); for(i=0; i<n; i++) scanf("%d",&a[i]); printf("\nagain, Enter %d Numbers\n", N); for(i=0; i<n; i++) scanf("%d",&b[i]); printf("\n The result is %d\n", add_nums(a, B, C, size)); printf("\n The result Array is:\n"); for(i=0; i<n; i++) printf("%d\t", C[i]);
סעיף ב': שנה את הגדרת הפרוצדורה,add_nums כך שתקבל פויינטר לפונקציית איתחול מערך. פונקצית האיתחול: size); void init arr(int arr[], int הגדרת add_numsהחדשה: int add_nums(int A[],int B[], int C[], int size, void (*initf)(int[], int)); קוד Cהקורא לפרוצדורה הוא: #include <stdio.h> #define N 10 extern int add_nums(int A[],int B[], int C[], int size, void (*initf)(int[], int)); void initarr(int arr[], int size); void main() { int A[N], B[N], C[N], i, size=n; printf("\n The result is %d\n", add_nums(a, B, C, size, initarr)); printf("\n The result Array is:\n"); for(i=0; i<n; i++) printf("%d\t", C[i]); } void initarr(int arr[], int size) { int i; printf("\nenter %d Numbers\n", size); for(i=0; i<size; i++) scanf("%d",&arr[i]); }
תרגיל 9 - ייצוגמספריםממשייםבזיכרון עליכם לכתוב את ייצוג המספרים הבאים בזיכרון כ -,float double ו-.long double 9.0 0.625 1.4 (1 (2 (3 תרגיל 10 סעיף א': - המעבד המתמטי שיטת ניוטון-רפסון (או כלל ניוטון) היא אלגוריתם יעיל באנליזה נומרית למציאת שורשים של פונקציה ממשית כלשהי. נשתמש בשיטה זו למציאת שורש של X. לאחרnאיטראציות ניתן למצוא את ע"י הסדרה הבאה: X0=X,. הגדרת ממש פרוצדורה בשפת אסמלי שתקרא מתוך תכנית הפרוצדורה היא: Cהמחשבת קירוב נומרי של float my_sqrt(float x, int n); קוד Cהקורא לפרוצדורה הוא: #include <stdio.h> extern float my_sqrt(float x, int n); void main() { float x; printf("enter x:\n");
scanf("%f", &x); printf("my_sqrt(%f) = %f\n", x, my_sqrt(x, 5)); } /* end of main */ סעיף ב': יש לכתוב קוד לפתרון התרגיל עבור: :double הגדרת הפרוצדורה היא: double my_sqrtd(double x, int n); :long double הגדרת הפרוצדורה היא: long double my_sqrtld(long double x, int n);.1.2 בהצלחה!!!